#include <pthread.h>

namespace sdf
{
    typedef int(*func_t)(int arg);//函数指针类型
    class thread
    {
    public:
        //构造
        Thread(int arg，func_t func)
        :_arg(arg)
        ,_func(func)
        {}
        //ThreadRun方法没有被static修饰时，是类中的成员方法，参数还有一个隐含的this指针
        static void* ThreadRun(void* args)
        {
            _id = pthread_self();
            thread* p = (thread*)args;
            return p->_func(_arg);
        }
        //获取线程id
        pthread_t GetId()
        {
            return _id;
        }
        //运行线程
        bool start()
        {
            int n = ::pthread_creat(&_id, nullptr, ThreadRun, (void*)this);
            if(n!=0) 
            {
                return false;
            }
            return true;
        }
        //取消线程
        void ThreadCancel()
        {
            pthread_cancel(_id);
        }
        //等待线程
        void* join()
        {
            void* retVal = nullptr;
            int n = pthread_join(_id, &retVal);
            if(n==0) return retVal;
            return nullptr;
        }
    private:
        int _arg;
        pthread_t _id = -1;
        func_t _func;
    };
}